/* Set集合的api  */
const { log } = console
// 1. 创建set集合
let f1 = () => {
  let set = new Set([1, 2, 3, 4, 1, 2, 1, 1, 1])
  log(set) // Set { 1, 2, 3, 4 }
}

// 2. set集合的遍历
let f2 = () => {
  let set = new Set([1, 2, 3, 4, 1, 2, 1, 1, 1])
  for (let item of set) {
    log(item) // 集合的元素 1 2 3 4
  }
}

// 3. set集合的特点 无序，唯一
let f3 = () => {
  let set = new Set([1, 2, 3, 4, 1, 2, 1, 1, 1])
  for (let item of set) {
    log(item) // 集合的元素 1 2 3 4 重复的1,2全部删除
  }
}

// 4. set的size属性
let f4 = () => {
  let set = new Set()
  set.add('a')
  set.add(1)
  set.add(0)
  set.add([1, 3])
  set.add(1)
  set.add([])
  set.add([])
  set.add({})
  set.add({})
  log(set)
  log(set.size) // 元素的个数 8
}

// 5. add() 添加元素
let f5 = () => {
  let set = new Set()
  set.add('a')
  log(set) // Set { 'a' }
}

// 6. clear() 清空元素
let f6 = () => {
  let set = new Set([1, 2, 3, 4, 1, 2, 1, 1, 1])
  set.clear()
  log(set) // Set {}
}

// 7. delete() 删除元素
let f7 = () => {
  let set = new Set([1, 2, 3, 4, 1, 2, 1, 1, 1])
  set.delete(1)
  log(set) // Set { 2, 3, 4 }
}

// 8. forEach()遍历元素
let f8 = () => {
  let set = new Set([1, 2, 3, 4, 1, 2, 1, 1, 1])
  set.forEach((item, index) => {
    log(index, item)
  })
}

// 9. has(el) 是否有元素
let f9 = () => {
  let set = new Set([1, 2, 3, 4])
  log(set.has(5)) // false
  set.has(4) ? set.delete(4) : ''
  log(set) // Set { 1, 2, 3 }
}

// 10. keys() values() entries()
let f10 = () => {
  let set = new Set([1, 2, 3, 4])
  let keys = set.keys()
  let values = set.values()
  let entries = set.entries()
  log('-----------------keys-------------------')
  for (let key of keys) {
    log(key)
  }
  log('-----------------values-------------------')
  for (let v of values) {
    log(v)
  }
  log('-----------------entries-------------------')
  for (let en of entries) {
    log(en)
  }
}

// 11. 使用set集合对数组去重
let f11 = () => {
  function f(arr) {
    return [...new Set(arr)]
  }
  log(f([1, 2, 3, 3, 0, 4, 1, 3, 2])) // [ 1, 2, 3, 0, 4 ]
}
f11()
